﻿#pragma once
#include <qdialog>
#include <QStringList>

// 运动控制操作
// 主要功能：
// 1.相机对焦
// 2.IO输出控制
class QButtonGroup;
class DM2CMotion;
class QListWidget;
class QLineEdit;
class MotionDlg :
    public QDialog
{
    Q_OBJECT
public:
    MotionDlg(QWidget *parent = nullptr);

    virtual void showEvent(QShowEvent* evnt);

protected:
    void initLayout();
    void initMotion();

private slots:
    void on_setRunParams();
    void on_moveForward();
    void on_moveBack();
    void on_moveTo();

    void on_stopMove();

    void on_home();
    void on_setAsOriginal();

    void on_resetAllIO();

    void on_clearLogs();

    void on_radioHomeMode();
    void on_radioMoveDir();
    void on_radioIOSel();

    void on_timeOut();

protected:
    // 更新电机坐标位置
    void updateMacPosition();
    // 记录日志信息
    // 主动写日志
    void writeLog(const char* data);
    // 接收到返回信息
    void receiveLog(const char* data);

    void enableBtns(bool enable);

    void setRunning(bool run) { running_ = run; }
    bool isRunning() { return running_; }

private:
    DM2CMotion* dmcMotion_ = nullptr;

    QListWidget* listLog_ = nullptr;

    QButtonGroup* homeModeGroup_ = nullptr;
    QButtonGroup* moveDirGroup_ = nullptr;
    QButtonGroup* ioSelectGroup_ = nullptr;

    QLineEdit* vel_ = nullptr;
    QLineEdit* acc_ = nullptr;
    QLineEdit* dec_ = nullptr;
    QLineEdit* cmdPos_ = nullptr;
    QLineEdit* macPos_ = nullptr;
    QLineEdit* stepLength_ = nullptr;
    QLineEdit* destCoord_ = nullptr;


    std::vector<QPushButton*> allBtns_;

    int homeMode_ = 0;  // 0：表示限位回零，1：表示原点回零
    int moveDir_ = 0;   // 移动方向：0-反向 1-正向

    bool running_ = false;
};

